/************************************************************************
 * 项目名称（软件名称）：忠旺机械物资管理系统(mms)                           *
 * 研发设计单位：忠旺机械设备制造有限公司机械设计院智能控制设计科设计与研发。   *
 * 版权所有：忠旺机械设备制造有限公司                                       *
 * 注：本项目的一切技术专利，使用规范归解释权由忠旺机械设备制造有限公司所有。   *
 * 软件版本：Ver 1.0.0                                                   *
 * 文件路径：com.zhongwang.mms.module.buy.controller                                             *
 * 创建时间：2020年08月31日 10时05分             *
 *======================================================================*/
package com.zhongwang.mms.module.buy.controller;

import com.zhongwang.mms.base.BaseController;
import com.zhongwang.mms.common.JsonResult;
import com.zhongwang.mms.common.ValidResult;
import com.zhongwang.mms.gen.entity.BReportPlan;
import com.zhongwang.mms.module.buy.model.ReportPlanModel;
import com.zhongwang.mms.module.buy.service.GetReportPlanApiService;
import com.zhongwang.mms.module.buy.service.SupplementaryReportPlanInputService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @name: SupplementaryReportPlanInputController
 * @description: 补计划录入控制层
 * @author: 徐一贺
 * @coddingDate: 2020/8/31 10:06
 * @version: v1.0
 **/
@Controller
@RequestMapping("/buy/supplementaryReportPlanInput")
public class SupplementaryReportPlanInputController extends BaseController {
    @Autowired
    private SupplementaryReportPlanInputService service;
    @Autowired
    private GetReportPlanApiService getReportPlanApiService;

    /**
     * @name: page
     * @description: 跳转到补计划录入
     * @param: []
     * @returnType: java.lang.String
     * @author: 徐一贺
     * @coddingDate: 2020/8/31 10:17
     * @version: v1.0
     **/
    @GetMapping
    @RequiresPermissions({"buy:planadd:view"})
    public String page(Model model) {
        model.addAttribute("categories", service.findTypes());
        model.addAttribute("planners", service.findPlannerList());
        model.addAttribute("vwDictCommonList",getReportPlanApiService.findVwDictCommonListByMat());
        model.addAttribute("rppAssistTypes",getReportPlanApiService.findVwDictCommonListByAssistTypes());
        return "buy/supplementaryReportPlanInput/page";
    }


    /**
     * 列表数据
     *
     * @param reportPlanModel 查询条件
     * @return list
     */
    @ResponseBody
    @PostMapping("/list")
    @RequiresPermissions({"buy:planadd:view"})
    public JsonResult list(ReportPlanModel reportPlanModel) {
        startPage();
        List<ReportPlanModel> list = service.findReportPlanByQuery(reportPlanModel);
        return jsonResult(list);
    }

    /**
     * 检查项目号是否存在
     *
     * @param rppProjectCode 项目号
     * @return json 数据
     */
    @ResponseBody
    @PostMapping("/checkProjectCode")
    @RequiresPermissions({"buy:planadd:view"})
    public ValidResult checkProjectCode(String rppProjectCode) {
        boolean exist = service.findProjectCode(rppProjectCode);
        return exist ? ValidResult.SUCCESS : ValidResult.FAIL;
    }

    /**
     * 检查项目号是否存在
     *
     * @param code 项目号
     * @return json 数据
     */
    @ResponseBody
    @PostMapping("/checkProjectCodeNonExistent")
    @RequiresPermissions({"buy:planadd:view"})
    public JsonResult checkProjectCodeNonExistent(String code) {
        boolean exist = service.findProjectCode(code);
        return success().setData(exist);
    }

    /**
     * 添加提报计划
     *
     * @param reportPlan reportPlan
     * @return json
     */
    @ResponseBody
    @PostMapping("/create")
    @RequiresPermissions({"buy:planadd:add"})
    public JsonResult create(ReportPlanModel reportPlan) {
        return success().setData(service.insertReportPlan(reportPlan));
    }

    /**
     * 导入
     *
     * @param file 导入文件
     * @return JsonResult
     */
    @ResponseBody
    @PostMapping("/uploadFile")
    @RequiresPermissions({"buy:planadd:add"})
    public JsonResult uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("rppId") Integer rppId) {
        service.uploadFile(file,rppId);
        return success();
    }

    /**
     * 导入
     *
     * @param file 导入文件
     * @return JsonResult
     */
    @ResponseBody
    @PostMapping("/import")
    @RequiresPermissions({"buy:planadd:add"})
    public JsonResult reportPlanImport(@RequestParam("file") MultipartFile file) {
        return success(service.importFile(file));
    }

    /**
     * 判断文件是否存在
     *
     * @param url 文件路径
     * @return JsonResult
     */
    @ResponseBody
    @PostMapping("/exist")
    @RequiresPermissions({"buy:planadd:view"})
    public JsonResult checkFileExist(String url) {
        return jsonResult(service.exist(url));
    }

    /**
     * 删除提报计划
     *
     * @param id 主键
     * @return json
     */
    @ResponseBody
    @PostMapping("/delete")
    @RequiresPermissions({"buy:planadd:del"})
    public JsonResult delete(Integer id) {
        return jsonResult(service.deleteById(id));
    }

    /**
     * 批量删除提报计划
     *
     * @param rppIds 主键
     * @return json
     */
    @ResponseBody
    @PostMapping("/deleteAll")
    @RequiresPermissions({"buy:planadd:del"})
    public JsonResult delete(Integer[] rppIds) {
        return jsonResult(service.deleteInId(rppIds));
    }

    /**
     * 提交提报计划
     *
     * @param id 主键
     * @return json
     */
    @ResponseBody
    @PostMapping("/commit")
    @RequiresPermissions({"buy:planadd:edit"})
    public JsonResult commit(Integer id) {
        return jsonResult(service.commitById(id));
    }

    /**
     * 提交提报计划
     *
     * @param rppIds 主键
     * @return json
     */
    @ResponseBody
    @PostMapping("/commitAll")
    @RequiresPermissions({"buy:planadd:edit"})
    public JsonResult commit(Integer[] rppIds) {
        return jsonResult(service.commitInId(rppIds));
    }

    /**
     * 查询提报计划，包含采购计划状态， 原始数量和其它拆分数量总和
     *
     * @param id 主键
     * @return json
     */
    @ResponseBody
    @PostMapping("/id")
    @RequiresPermissions({"buy:planadd:view"})
    public ReportPlanModel id(Integer id) {
        return service.findReportPlanById(id);
    }

    /**
     * 修改提报计划
     *
     * @param reportPlan reportPlan
     * @return json
     */
    @ResponseBody
    @PostMapping("/edit")
    @RequiresPermissions({"buy:planadd:edit"})
    public JsonResult updateProject(BReportPlan reportPlan) {
        return jsonResult(service.updateReportPlan(reportPlan));
    }
}
